package TDAGrafo;

import TDALista.TElemento;
import TDALista.TLista;



/**
 *
 * @author La revancha
 */
public class TCamino {
	public TVertice origen;
	public TLista adyacencias;

	public TCamino(){
		adyacencias = new TLista();
	}

	/**
	 * agrega una arista al recorrido de nuestro camino
	 * @param nueva
	 * @return true si pudo insertarla o false en caso contrario
	 */
	public boolean recorrido(TAdyacencia nueva){

		if (nueva!=null) {
		TElemento ainsertar = new TElemento(nueva.destino.etiqueta,nueva);
		adyacencias.insertarAlFinal(ainsertar);
		return true;

		}
		return false;
	}

	/**
	 * Metodo que hace una copia sin compartir memoria del camino.
	 * @return un nuevo camino identico pero sin compartir memoria.
	 */
	public TCamino clonar(){
		TCamino nuevo =new TCamino();
		nuevo.origen=origen;
		TElemento aux = adyacencias.primero;

		while (aux!=null){
			nuevo.recorrido((TAdyacencia) aux.datos);
			aux=aux.siguiente;

		}

		return nuevo;

	}

	@SuppressWarnings("rawtypes")
	public Comparable[] mostrarCamino() {
		int tamanioCamino = 1 + adyacencias.obtenerCantidadElementos();
		Comparable[] salida = new Comparable[tamanioCamino];
		salida[0] = origen.etiqueta;
		TElemento nodoActualAdyacencias = adyacencias.primero;
		int posicionActual = 1;
		while (nodoActualAdyacencias != null) {
			TAdyacencia ady = (TAdyacencia) nodoActualAdyacencias.datos;
			salida[posicionActual] = ady.destino.etiqueta;
			nodoActualAdyacencias = nodoActualAdyacencias.siguiente;
			posicionActual++;
		}
		return salida;
	}


}

